home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / WRITEPAD.PAK / FILEDLG.C < prev    next >
C/C++ Source or Header  |  1997-05-06  |  6KB  |  220 lines

  1. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  2. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  3. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  4. // PARTICULAR PURPOSE.
  5. //
  6. // Copyright (C) 1993-1995  Microsoft Corporation.  All Rights Reserved.
  7. //
  8. //  MODULE: filedlg.c
  9. //
  10. //  PURPOSE: Shows basic use of "Open" and "Save As" common dialogs.
  11. //
  12. //
  13. //  FUNCTIONS:
  14. //    CmdFileOpen   - Uses Open common dialog to prompt user for filename
  15. //    CmdFileSaveAs - Uses Save common dialog to prompt user for filename
  16. //
  17. //
  18. //  COMMENTS:
  19. //
  20. //
  21. //
  22. //  SPECIAL INSTRUCTIONS: N/A
  23. //
  24.  
  25. #include <windows.h>            // required for all Windows applications
  26. #include "globals.h"            // prototypes specific to this application
  27. #include "resource.h"
  28.  
  29. static char szDirName[256] = {'\0'};    // directory string
  30. void SetDirectory(LPOPENFILENAME);
  31.  
  32. //
  33. //  FUNCTION: CmdFileOpen(HWND, WORD, WORD, HWND)
  34. //
  35. //  PURPOSE: Call the open common dialog and show its results.
  36. //
  37. //  PARAMETERS:
  38. //    hwnd     - The window handle.
  39. //    wCommand - IDM_OPEN (Unused)
  40. //    wNotify  - (Unused)
  41. //    hwndCtrl - NULL (Unused)
  42. //
  43. //  RETURN VALUE:
  44. //    Always returns 0
  45. //
  46. //  COMMENTS:
  47. //
  48. //
  49.  
  50. #pragma argsused
  51. LRESULT CmdFileOpen(HWND hwnd, WORD wCommand, WORD wNotify, HWND hwndCtrl)
  52. {
  53.     OPENFILENAME ofn = {0}; // common dialog box structure
  54.     char szFile[256];       // filename string
  55.     char szFileTitle[256];  // file-title string
  56.     char szFilter[256];     // filter string
  57.     char chReplace;         // strparator for szFilter
  58.     int i, cbString;        // integer count variables
  59.  
  60.     // Retrieve the current directory name and store it in szDirName.
  61.  
  62.     if (szDirName[0] == '\0')
  63.     {
  64.         GetCurrentDirectory(sizeof(szDirName), szDirName);
  65.     }
  66.  
  67.     // Place the terminating null character in the szFile.
  68.  
  69.     szFile[0] = '\0';
  70.  
  71.     // Load the filter string from the resource file.
  72.  
  73.     cbString = LoadString(hInst, IDS_FILTERSTRING, szFilter, sizeof(szFilter));
  74.  
  75.     // Add a terminating null character to the filter string.
  76.  
  77.     chReplace = szFilter[cbString - 1];
  78.     for (i = 0; szFilter[i] != '\0'; i++)
  79.     {
  80.         if (szFilter[i] == chReplace)
  81.             szFilter[i] = '\0';
  82.     }
  83.  
  84.     // Set the members of the OPENFILENAME structure.
  85.  
  86.     ofn.lStructSize = sizeof(OPENFILENAME);
  87.     ofn.hwndOwner = hwnd;
  88.     ofn.lpstrFilter = szFilter;
  89.     ofn.nFilterIndex = 1;
  90.     ofn.lpstrFile = szFile;
  91.     ofn.nMaxFile = sizeof(szFile);
  92.     ofn.lpstrFileTitle = szFileTitle;
  93.     ofn.nMaxFileTitle = sizeof(szFileTitle);
  94.     ofn.lpstrInitialDir = szDirName;
  95.     ofn.Flags = OFN_SHOWHELP | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  96.  
  97.     // Display the Open dialog box.
  98.  
  99.     if (GetOpenFileName(&ofn))
  100.     {
  101.         CreateMDIChild(ofn.lpstrFile);
  102.         Open(ofn.lpstrFile,
  103.              MAKEBOOL((ofn.Flags & OFN_READONLY)),
  104.              hwnd);
  105.         SetDirectory(&ofn);
  106.     }
  107.     return 0;
  108. }
  109.  
  110.  
  111. //
  112. //  FUNCTION: CmdFileSaveAs(HWND, WORD, WORD, HWND)
  113. //
  114. //  PURPOSE: Call the SaveAs common dialog and show the results.
  115. //
  116. //  PARAMETERS:
  117. //    hwnd     - The window handle.
  118. //    wCommand - IDM_SAVEAS (Unused)
  119. //    wNotify  - (Unused)
  120. //    hwndCtrl - NULL (Unused)
  121. //
  122. //  RETURN VALUE:
  123. //    Always returns 0
  124. //
  125. //  COMMENTS:
  126. //
  127. //
  128.  
  129. #pragma argsused
  130. LRESULT CmdFileSaveAs(HWND hwnd,
  131.                              WORD wCommand,
  132.                              WORD wNotify,
  133.                              HWND hwndCtrl)
  134. {
  135.      OPENFILENAME ofn = {0};      // common dialog box structure
  136.      char szFile[256];            // filename string
  137.     char szFileTitle[256];       // file-title string
  138.     char szFilter[256];          // filter string
  139.     char szCurrentFileName[256]; // current filename
  140.     char chReplace;              // string separator for szFilter
  141.     int  i, cbString;            // integer count variables
  142.  
  143.     // Retrieve the current directory name and store it in szDirName.
  144.  
  145.     if (szDirName[0] == '\0')
  146.     {
  147.         GetCurrentDirectory(sizeof(szDirName), szDirName);
  148.     }
  149.  
  150.     // Place the terminating null character in szFile.
  151.  
  152.     szFile[0] = '\0';
  153.  
  154.     // Load the filter string from the .RC file.
  155.  
  156.     cbString = LoadString(hInst, IDS_FILTERSTRING, szFilter, sizeof(szFilter));
  157.  
  158.     // Add a terminating null character to the filter string.
  159.  
  160.     chReplace = szFilter[cbString - 1];
  161.  
  162.     for (i = 0; szFilter[i] != '\0'; i++)
  163.     {
  164.         if (szFilter[i] == chReplace)
  165.             szFilter[i] = '\0';
  166.      }
  167.  
  168.     // Set the members of the OPENFILENAME structure.
  169.  
  170.     ofn.lStructSize = sizeof(OPENFILENAME);
  171.     ofn.hwndOwner = hwnd;
  172.     ofn.lpstrFilter = szFilter;
  173.     ofn.nFilterIndex = 1;
  174.     ofn.lpstrFile = szFile;
  175.     ofn.nMaxFile = sizeof(szFile);
  176.  
  177.     ofn.lpstrFileTitle = szFileTitle;
  178.     ofn.nMaxFileTitle = sizeof(szFileTitle);
  179.     ofn.lpstrInitialDir = szDirName;
  180.     ofn.lpstrDefExt = "txt";
  181.      ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
  182.  
  183.     // Display the Save As dialog box.
  184.  
  185.     if (GetSaveFileName(&ofn))
  186.     {
  187.         GetWindowText(GetActiveMDIChild(), 
  188.                       szCurrentFileName, 
  189.                       sizeof(szCurrentFileName));
  190.         SetWindowText(GetActiveMDIChild(), ofn.lpstrFile);
  191.         SaveAs(ofn.lpstrFile, szCurrentFileName, GetActiveMDIChild());
  192.         SetDirectory(&ofn);
  193.         return TRUE;
  194.     }
  195.  
  196.      return 0;
  197. }
  198.  
  199.  
  200. //
  201. //  FUNCTION: SetDirectory(LPOPENFILENAME)
  202. //
  203. //  PURPOSE: Saves the path to the current directory for future use
  204. //
  205. //  PARAMETERS:
  206. //    lpofn - Long pointer to the OPENFILENAME structure
  207. //
  208. //  RETURN VALUE:
  209. //    void
  210. //
  211. //  COMMENTS:
  212. //
  213. //
  214.  
  215. void SetDirectory(LPOPENFILENAME lpofn)
  216. {
  217.     lpofn->lpstrFile[lpofn->nFileOffset] = '\0';
  218.     lstrcpy(szDirName, lpofn->lpstrFile);
  219. }
  220.